// 引入核心类
var fs = require('fs');
var http = require('http');
// 引入的第三方类，用来处理时间
var moment = require('moment');
var server = http.createServer();
// 创建服务
server.on('request', function (res, response) {
  var urls = res.url
  console.log(urls)
  if (urls === '/') {
    response.setHeader('Content-type', 'text/html;charset=utf-8')
    fs.readFile('./index.html', 'utf8', function (err, data) {
      if (!err) {
        response.end(data)
      }
    })
  } else if (urls === '/fileList') {
    // 这个fileList是读取文件的页面上加载ajax方法
    console.log('test')
    fs.readdir('./', 'utf8', function (err, data) {
      console.log(data);
      // 创建一个新的数组
      var arrayObj = [];
      var count = 0;
      for (var i = 0; i < data.length; i++) {
        arrayObj[i] = {};
        (function (i) {
          // 异步操作，可能在for循环走完以后，它还在拿数据，所以可能造成数据为空！
          fs.stat(data[i], function (statErr, statData) {
            if (statData.isFile()) {
              arrayObj[i].type = 'f'
            } else {
              arrayObj[i].type = 'd'
            }
            arrayObj[i].name = data[i];
            arrayObj[i].size = statData.size
            arrayObj[i].mtime = moment(statData.mtime).format('Y-m-d H:m:s');
            count++;// 计算回调次数
            if (data.length === count) {
              console.log(arrayObj)
              response.end(JSON.stringify(arrayObj))
            }
          })
        })(i) // 自调用匿名函数
      }
      /*
      * 这里为啥要这样写呢？
      * 因为是异步回调，因为我们的回调函数在循环结束后才能运行，所以按照最开始的思路一边循环一边追加数据，那么可能是不成功的
      * 函数每执行一次，就形成一个作用域
      *
      * 闭包函数可对变量进行保存
      * */
    })
  } else {
    /**
     * 这个用来处理图片，但后来的css什么的，还需要又该怎样读取呢
     * 因为目前这里并没有给再读取的文件设置编码，完全用来处理图片了
     */
    fs.readFile('.' + urls, '', function (err, data) {
      response.end(data)
    })
  }
})
// 监听访问及接口
server.listen(8000, function () {
  console.log('请访问127.0.0.1:8000进行访问！')
})